package com.yida.gwj.deposit.service;

import com.yida.gwj.deposit.domain.GwjDepositBusinessHouse;
import com.yida.gwj.deposit.domain.dto.refund.GwjRefundCompleteHouseDetailDTO;
import com.yida.gwj.deposit.domain.dto.split.GwjFundsSplitBusinessHouseDTO;
import com.yida.gwj.deposit.domain.request.split.GwjFundsSplitBusinessHouseRequest;

import java.math.BigDecimal;
import java.util.List;

/**
 * 业务房屋信息（缴存业务管理模块）Service接口
 *
 * @author lqq
 * @date 2023-01-10
 */
public interface IGwjDepositBusinessHouseService {
	/**
	 * 查询业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizHouseId 业务房屋信息（缴存业务管理模块）主键
	 * @return 业务房屋信息（缴存业务管理模块）
	 */
	public GwjDepositBusinessHouse selectGwjDepositBusinessHouseByBizHouseId(Long bizHouseId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）
	 *
	 * @param houseId 房屋ID
	 * @param bizId   业务ID
	 * @return 业务房屋信息（缴存业务管理模块）
	 */
	public GwjDepositBusinessHouse selectGwjDepositBusinessHouseByHouseIdAndBizId(Long houseId, Long bizId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）
	 *
	 * @param houseCode 房屋编号
	 * @param bizId     业务ID
	 * @return 业务房屋信息（缴存业务管理模块）
	 */
	public GwjDepositBusinessHouse selectGwjDepositBusinessHouseByHouseCodeAndBizId(String houseCode, Long bizId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表
	 *
	 * @param gwjDepositBusinessHouse 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	public List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseList(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 新增业务房屋信息（缴存业务管理模块）
	 *
	 * @param gwjDepositBusinessHouse 业务房屋信息（缴存业务管理模块）
	 * @return 结果
	 */
	public int insertGwjDepositBusinessHouse(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 修改业务房屋信息（缴存业务管理模块）
	 *
	 * @param gwjDepositBusinessHouse 业务房屋信息（缴存业务管理模块）
	 * @return 结果
	 */
	public int updateGwjDepositBusinessHouse(GwjDepositBusinessHouse gwjDepositBusinessHouse);

	/**
	 * 批量删除业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizHouseIds 需要删除的业务房屋信息（缴存业务管理模块）主键集合
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessHouseByBizHouseIds(Long[] bizHouseIds);

	/**
	 * 删除业务房屋信息（缴存业务管理模块）
	 *
	 * @param bizId     业务ID
	 * @param buildCode 楼栋标识码
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessHouseByBizIdAndBuildCode(Long bizId, String buildCode);

	/**
	 * 删除业务房屋信息（缴存业务管理模块）信息
	 *
	 * @param bizHouseId 业务房屋信息（缴存业务管理模块）主键
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessHouseByBizHouseId(Long bizHouseId);

	/**
	 * 根据业务ID查询业务房屋信息（缴存业务管理模块）列表
	 *
	 * @param bizId 业务ID
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizId(Long bizId);

	/**
	 * 根据业务ID和楼栋标识码查询业务房屋信息（缴存业务管理模块）列表
	 *
	 * @param bizId      业务ID
	 * @param buildCodes 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizIdAndBuildCodes(Long bizId, String[] buildCodes);

	/**
	 * 根据业务ID和楼栋标识码查询业务房屋信息（缴存业务管理模块）列表
	 *
	 * @param bizId     业务ID
	 * @param buildCode 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizIdAndBuildCode(Long bizId, String buildCode);

	/**
	 * 查询业务楼栋下所有房屋及业主信息
	 *
	 * @param bizId
	 * @param buildCode
	 * @return
	 */
	List<GwjRefundCompleteHouseDetailDTO> listBizHouseDTO(Long bizId, String buildCode);

	/**
	 * 根据业务ID和楼栋标识码查询业务房屋信息（缴存业务管理模块）列表
	 *
	 * @param bizId      业务ID
	 * @param selectFlag 是否选中
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizIdAndSelectFlag(Long bizId, String selectFlag);

	/**
	 * 根据业务ID删除业务房屋信息（缴存业务管理模块）信息
	 *
	 * @param bizId 业务ID
	 * @return 结果
	 */
	int deleteGwjDepositBusinessHouseByBizId(Long bizId);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表  含楼栋信名称、业主名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseDetailList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表  含业主名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseWithOwnerNameList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表  含楼栋信名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseWithBuildNameList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 查询业务房屋信息（缴存业务管理模块）列表  含楼栋信名称、就算标准名称
	 *
	 * @param gwjFundsSplitHouseRequest 业务房屋信息（缴存业务管理模块）
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	List<GwjFundsSplitBusinessHouseDTO> selectGwjDepositBusinessHouseWithBuildNameAndCalculateNameList(GwjFundsSplitBusinessHouseRequest gwjFundsSplitHouseRequest);

	/**
	 * 批量修改业务房屋信息（缴存业务管理模块）
	 *
	 * @param gwjDepositBusinessHouses 业务房屋信息（缴存业务管理模块）
	 */
	void updateBatchGwjDepositBusinessHouse(List<GwjDepositBusinessHouse> gwjDepositBusinessHouses);

	/**
	 * 根据业务ID和楼栋标识码统计预测面积
	 *
	 * @param bizId      业务ID
	 * @param buildCodes 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	BigDecimal countForecastSizeByBizIdAndBuildCodes(Long bizId, String[] buildCodes);

	/**
	 * 根据业务ID和楼栋标识码统计实测面积
	 *
	 * @param bizId      业务ID
	 * @param buildCodes 楼栋标识码
	 * @return 业务房屋信息（缴存业务管理模块）集合
	 */
	BigDecimal countActualSizeByBizIdAndBuildCodes(Long bizId, String[] buildCodes);

	/**
	 * 批量信息房屋信息
	 *
	 * @param houseList 房屋信息
	 * @return
	 */
	Long insertGwjDepositBusinessHouses(List<GwjDepositBusinessHouse> houseList);

	/**
	 * 根据业务房屋主键查询业务参数
	 *
	 * @param bizHouseIds
	 * @return
	 */
	List<GwjDepositBusinessHouse> selectGwjDepositBusinessHouseListByBizIds(Long[] bizHouseIds);
}
